package httpclient

import (
	"fmt"
	"net/http"
)

// Error 表示 HTTP 客户端错误
type Error struct {
	Code    int    // HTTP 状态码
	Message string // 错误消息
	Err     error  // 原始错误
}

// Error 实现 error 接口
func (e *Error) Error() string {
	if e.Err != nil {
		return fmt.Sprintf("HTTP %d: %s (%v)", e.Code, e.Message, e.Err)
	}
	return fmt.Sprintf("HTTP %d: %s", e.Code, e.Message)
}

// Unwrap 返回原始错误
func (e *Error) Unwrap() error {
	return e.Err
}

// IsTimeout 检查是否是超时错误
func (e *Error) IsTimeout() bool {
	return e.Code == http.StatusRequestTimeout || e.Code == http.StatusGatewayTimeout
}

// IsNotFound 检查是否是 404 错误
func (e *Error) IsNotFound() bool {
	return e.Code == http.StatusNotFound
}

// IsServerError 检查是否是服务器错误
func (e *Error) IsServerError() bool {
	return e.Code >= 500 && e.Code < 600
}

// IsClientError 检查是否是客户端错误
func (e *Error) IsClientError() bool {
	return e.Code >= 400 && e.Code < 500
}

// NewError 创建新的错误
func NewError(code int, message string, err error) *Error {
	return &Error{
		Code:    code,
		Message: message,
		Err:     err,
	}
}
